/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package utilitarios;

import geradorImagens.Pixel;
import imagemBmp.FormatoBmp;
import java.util.ArrayList;

/**
 *
 * @author jeferson
 */
public class Histograma {

    public Pixel[] cores;
    public int[] frequencias;
    public int numeroPixel;
    public int corMax;

    public Histograma() {
    }

    public Histograma(FormatoBmp bmp) {

        ArrayList<Pixel> lista = new ArrayList<Pixel>();

        for (int i = 0; i < bmp.imagem.length; i += 3) {
            Pixel novo = new Pixel();
            novo.setR((bmp.imagem[i + 2] & 0xFF));
            novo.setG((bmp.imagem[i + 1] & 0xFF));
            novo.setB((bmp.imagem[i] & 0xFF));
            lista.add(novo);
        }

        Pixel cor;
        ArrayList<Pixel> coresImagem = new ArrayList<Pixel>();
        for (int i = 0; i < lista.size(); i++) {
            cor = new Pixel(lista.get(i).getR(), lista.get(i).getG(), lista.get(i).getB(), 0);
            boolean existe = false;
            if (coresImagem.isEmpty()) {
                coresImagem.add(cor);
            } else {
                for (int j = 0; j < coresImagem.size(); j++) {
                    if (cor.getR() == coresImagem.get(j).getR()
                            && cor.getG() == coresImagem.get(j).getG()
                            && cor.getB() == coresImagem.get(j).getB()) {
                        existe = true;
                        break;
                    }
                }
                if (existe == false) {
                    coresImagem.add(cor);
                }
            }

        }

        this.frequencias = new int[coresImagem.size()];
        for (int i = 0; i < coresImagem.size(); i++) {
            frequencias[i] = encontrarFrequencia(lista, coresImagem.get(i));
        }
        
        int maior = 0;
        for(int i = 0; i < frequencias.length; i++){
            if(maior < frequencias[i]){
                maior = frequencias[i];
            }
        }
        numeroPixel = maior;
        
        
        this.cores = new Pixel[coresImagem.size()];
        for(int i = 0; i < coresImagem.size(); i++){
            cores[i] = coresImagem.get(i);
        }
    }

    private int encontrarFrequencia(ArrayList<Pixel> cores, Pixel cor) {
        int contCor = 0;

        for (int i = 0; i < cores.size(); i++) {
            if (cor.getR() == cores.get(i).getR()
                    && cor.getG() == cores.get(i).getG()
                    && cor.getB() == cores.get(i).getB()) {

                contCor++;
            }
        }
        return contCor;
    }
}
